#include <algorithm>
#include <bitset>
#include <cstdint>
#include <functional>
#include <iostream>
#include <istream>
#include <queue>
#include <utility>
#include <vector>
using ll = int64_t;

const ll maxn = 2e5+5, inf=1e9+7;
ll n,m,k,s,p,q,c[maxn],distb[maxn],dist[maxn];
std::vector<std::vector<ll>> adj;
std::queue<ll> que;
std::bitset<maxn> isc,isw;

int main(){
    std::iostream::sync_with_stdio(false);
    std::cin.tie(nullptr);

    std::cin>>n>>m>>k>>s>>p>>q;
    for(ll i=1;i<=n;i++)distb[i]=inf,dist[i]=inf;
    for(ll i=1;i<=k;i++){
        std::cin>>c[i];
        isc[c[i]]=true;
        que.push(c[i]);
        distb[c[i]]=0;
    }
    adj.resize(n+1);
    for(ll i=1;i<=m;i++){
        ll a,b;
        std::cin>>a>>b;
        adj[a].emplace_back(b);
        adj[b].emplace_back(a);
    }
    while(que.size()){
        ll u = que.front();
        que.pop();
        for(ll v:adj[u]){
            distb[v]=std::min(distb[v],distb[u]+1);
            if(distb[v]<s)que.push(v);
        }
    }
    std::priority_queue<std::pair<ll, ll>, std::vector<std::pair<ll, ll>>, std::greater<std::pair<ll, ll>>> pq;
    pq.emplace(0,1);
    while(pq.size()){
        auto[ss,u] = pq.top();
        pq.pop();
        if(dist[u]<ss){
            continue;
        }
        for(auto v:adj[u]){
            if(v==n){
                std::cout<<ss<<"\n";
                return 0;
            }
            if(isc[v])continue;
            dist[v]=std::min(dist[v],ss+(distb[v]<=s?q:p));
            pq.emplace(ss+(distb[v]<=s?q:p),v);
        }
    }
}// MLE TODEBUG